package pruebaciudad.formas;

public abstract class FiguraConCentro extends Figura{
    private Punto centro;
    private boolean mostrarCentro = false;
    
    protected FiguraConCentro(Punto... puntos){
        super(puntos);
    }
    
    protected FiguraConCentro(int lados){
        super(lados);
    }
    
    /**
     * Decide si se mostrará el centro en dibujo o no
     * 
     * @param mostrarCentro <code>true</code> si se desea mostrar el centro y 
     * <code>flase</code> en caso contrario
     */
    public void setMostrarCentro(boolean mostrarCentro) {
        this.mostrarCentro = mostrarCentro;
    }

    /**
     * Dice si se mostrará el centro o no
     * 
     * @return <code>true</code> si se mostrará el centro y <code>flase</code> 
     * en caso contrario
     */
    public boolean mostrarCentro() {
        return mostrarCentro;
    }

    /**
     * @return El punto que representa el centro de la figura
     */
    public Punto getCentro() {
        return centro;
    }

    /**
     * Asigna un nuevo centro a la figura
     * 
     * @param centro El punto que se corresponde con el centro
     */
    public void setCentro(Punto centro) {
        if (this.centro == null){
            this.centro = centro;
            return;
        }
        
        //Una vez que cambiamos el centro, hay que ajustar todos los puntos
        int xOffset = centro.getX() - this.centro.getX();
        int yOffset = centro.getY() - this.centro.getY();
        
        this.centro = centro;
        
        for (int i = 0; i < puntos.length; i++){
            puntos[i] = new Punto(puntos[i].getX() + xOffset,
                                  puntos[i].getY() + yOffset);
        }
    }    
    
    @Override
    public void desplazar(int x, int y){
        setCentro(new Punto(centro.getX() + x, centro.getY() + y));
    }
}
